计算机概要与技术
计算机系统结构中的8个伟大思想
面向摩尔定律的设计
摩尔定律是Intel公司的创始人之一Gordon Moore在1965年对集成电路集成度做出的预测: 单芯片上的集成度每18-24个月翻一番. 计算机设计者必须考虑其设计完成时的芯片工艺水平, 而不是设计开始时的.
使用抽象简化设计
计算机架构师和程序员必须发明能够提高产量的技术, 否则设计时间也将会向资源规模同样按照摩尔定律增长. 提高硬件和软件生产率的主要技术之一是使用抽象 (abstraction) 来表示不同的设计层次, 在高层次中看不到低层次的细节, 只能看到个简化的模型.
加速大概率事件
加速大概率事件 (common case fast) 远比优化小概率事件更能提高性能.
通过并行提高性能
通过流水线提高性能
通过预测提高性能
存储器层次
由于存储器的速度通常影响性能、存储器的容量限制了解题的规模、当今计算系统中存储器的代价占了主要部分, 因此程序员希望存储器速度更快、容量更大、价格更便宜. 设计师们发现可以通过存储器层次 (hierarchy of memory) 来解决这些相互矛盾的需求. 在存储器层次中, 速度最快、容量最小并且每位价格最昂贵的存储器处于顶层, 而速度最慢、容量最大且每位价格最便宜的存储器处于最底层. 程序员看到的主存同时具有存储器层次中顶层的高速度和底层中的大容量和便宜的特征.
通过冗余提高可靠性
冗余部件可以替代失效部件闭并可以帮助检测错误.
程序概念入门
系统软件
操作系统 (operating system) 和编译程序 (compiler) 是现代计算机系统中必不可少的系统软件 (systems software).
- 操作系统是用户程序和硬件之间的接口, 为用户提供各种服务和监控功能. 操作系统最重要的作用有:
- 处理基本的输入和输出操作;
- 分配外存和内存;
- 为多个应用程序提供共享计算机资源的服务;
主流的操作系统: Windows, Linux, iOS.
- 编译程序的功能是将用高级语言 (C++, C, Java等) 编写的程序翻译成硬件能执行的指令 (instruction).
从高级语言到硬件语言
- 汇编语言 (assembly language) 将助记符形式的指令自动翻译为对应的二进制.
- 汇编程序 (assembler): 将指令由助记符形式翻译为二进制形式的程序.
- 机器可以理解的二进制语言是机器语言 (machine language).
- 高级编程语言 (high-level programming language) 程序经由编译器转换为汇编语言程序, 再汇编为二进制机器语言程序.
硬件概念入门
组成计算机的五个经典部件: 输入设备, 输出设备, 存储器, 数据通路 (运算器), 控制器.
- 输入设备 (input device) 与输出设备 (output device) 合称为I/O设备.
- 运算器和控制器常合称为处理器/中央处理单元.
- 无线网络设备既是输入设备也是输出设备.
图形显示器
液晶显示 (LCD, Liquid Crystal Display) 并非光源, 而是控制光的传输. 典型的 LCD 内含棒状液态分子团形成的转动螺旋线, 用来弯曲来自显示器后方的光线或者少量的反射光线. 当电流通过时, 液态分子棒不再弯曲, 也不再使光线弯曲, 由于两层相互垂直的偏光板之间充满液晶材料, 如果它不弯曲则光线不能通过 (在不施加任何电压的情况下, 液晶处于初始状态, 并将入射光的方向扭转 90°, 让背光源的入射光能够通过整个结构, 在显示屏上呈现白色; 而当施加电压时, 光线不再弯曲, 显示屏呈现为黑色).
- 今天, 大多数 LCD 显示器采用动态矩阵显示 (active matrix display) 技术, 其每个像素 (pixel) 都由一个晶体管精确地控制电流, 使图像更清晰. 在彩色动态矩阵 LCD 中,还有一个红-绿-蓝屏决定三种颜色分量的强度, 每个点需要3个晶体管开关.
图像由像素矩阵组成, 可以表示成二进制位的矩阵, 称为位图(bit map). 针对不同的屏幕尺寸及分辨率, 典型的屏幕中显示矩阵的大小可以从 1024×768 到 2048×1536. 彩色显示器使用 8 位来表示每个三原色, 每个像素用 24 位表示, 可以显示百万种不同的颜色.
计算机硬件采用光栅 (Raster) 刷新缓冲区(又称为帧缓冲区, Frame Buffer)来保存位图以支持图像. 要显示的图像保存在帧缓冲区中, 每个像素的二进制值以刷新频率读出到显示设备.
触摸屏
- 触控设备往往采用电容感应实现. 如果绝缘玻璃上覆盖一层透明的导体, 人的手指接触到屏幕范围时, 由于人是导体, 将会使屏幕的电场发生变化, 进而导致电容的变化.
机箱之内
- 集成电路 (integrated circuit, IC) 俗称芯片 (chip), 是一种将许多晶体管连接起来的设备.
- 中央处理单元 (central processor unit, CPU): 是计算机中最活跃的部分, 包括数据通路和控制器, 能将数字相加, 测试结果并按结果发出控制信号使I/O设备动作等.
- 数据通路 (datapath) 负责完成算术运算.
- 控制器 (control) 负责指导数据通路、存储器和I/O设备按照程序的指令正确执行.
- 存储器层次中包含两层: SRAM 和 DRAM:
- 内存 (memory) 是程序运行时的存储空间, 它同时用于保存程序运行时所使用的数据. 内存由 DRAM (dynamic random access memory, 动态随机访问存储器) 芯片组成, 用以承载程序的指令和数据.
- 缓存 (cache memory) 是一种小而快的存储器, 一般作为 DRAM 的缓冲. cache 采用的是另一种存储技术, 即 SRAM (static random access memory, 静态随机访问存储器), 其速度更快且不那么密集.
- 硬件与底层软件之间的接口被抽象为计算机的指令集体系结构 (instruction set architecture). 计算机体系结构包括指令、寄存器、存储访问和I/O等. 一般来说, 操作系统需要封装I/O操作、存储器分配和其他低级的系统功能细节.
- 提供给应用程序员的基本指令集和操作系统接口合称为应用二进制接口 (Application Binary Interface, ABI). 这定义了二进制层次可移植的计算机的标准.
数据安全
- 计算机中的内存是易失性存储器 (volatile memory). 类似 DRAM, 仅在加电时保存数据 (保持运行中的程序).
- 易失性存储器又称为主存储器 (main memory / primary memory). 非易失性存储器又称为二级存储器 (secondary memory). 后者是存储器层次中较低的一层.
- 磁盘 (magnetic disk) 或硬盘 (hard disk) 曾在二级存储器中占主导地位. 后来, 非易失性半导体存储器闪存 (flash memory) 在个人移动设备中替代了磁盘.
计算机网络与通信
- 最普遍的网络类型是以太网 (Ethernet).
- 在一定地理区域内用于传输数据的网络通常被称为局域网 (Local Area Network, LAN). 局域网通过交换机 (Switch) 进行连接, 可以提供路由 (routing) 与安全服务.
- 广域网可支持万维网 (World Wide Web), 是因特网 (Internet) 的骨干网.
集成电路制造
- 晶体管 (transistor): 一种由电信号控制的简单开关, 泛指一切以半导体材料为基础的单一元件.
- 超大规模集成电路 (very large-scale integrated circuit, VLSI): 由数十万乃至数百万晶体管组成的电路.
- 硅 (silicon) 的导电能力不强, 是一种半导体 (semiconductor). 用特殊的化学方法对硅添加某些材料, 可以将细微的区域转变为以下三种类型之一: 良好的导电体、良好的绝缘体、可控的导电体或绝缘体.
- 由硅晶体组成的棒硅锭 (silicon crystal ingot) 经切片机切成极薄的晶圆 (wafer). 这些晶圆再经过一系列化学加工过程最终产生晶体管等. 芯片通过切分晶圆得到.
性能
- 响应时间 (response time) 或执行时间 (execution time): 计算机完成某任务所需的总时间, 包括硬盘访问、内存访问、I/O活动、操作系统开销和 CPU 执行时间等.
- 吞吐率 (throughput) 或带宽 (bandwidth): 单位时间内完成的任务数量.
- 多用户共享同一计算机时, 单个处理器需要同时运行多个程序. 这种情况下, 系统可能更侧重于优化吞吐率, 而非最小化单个程序的响应时间. 为了区分运行我们自己任务的时间和一般的响应时间, 可以考虑度量 CPU 执行时间 (CPU execution time), 它只表示在 CPU 上花费的时间.
- CPU 时间还可进一步分为用于用户程序的时间 (user CPU time) 和操作系统为用户服务花去的 CPU 时间 (系统CPU时间, system CPU time). 两种 CPU 时间往往难以精确区分. 为了一致性, 我们保持基于响应时间和基于 CPU 执行时间的性能差异. 系统性能 (system performance) 表示空载系统的响应时间, CPU 性能 (CPU performance) 表示用户 CPU 时间.